<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>





  


  
  
  
  
  
  
  
  
  
  <title>DGDecode</title>
  <link rel="stylesheet" type="text/css" href="../../avisynth.css">
<!-- Automatically generated, don't change: $Id: dgdecode.htm,v 1.2 2005/10/31 14:55:54 macpaille Exp $ -->
</head>


<body>






<h1>DGDecode</h1>






<h2>R&eacute;sum&eacute;</h2>






<b>auteurs:</b> MarcFD, Nic, trbarry, Sh0dan, Graft et d'autres<br>






<b>version:</b> 1.4.0<br>






<b>cat&eacute;gorie:</b>&nbsp;Plugins (source)
d&eacute;codeurs MPEG
<br>






<b>t&eacute;l&eacute;chargement:</b>&nbsp;<a href="http://neuron2.net/dgmpgdec/dgmpgdec.html">http://neuron2.net/dgmpgdec/dgmpgdec.html</a>
<br>






<b>outils n&eacute;cessaires:</b><br>






<b>licence:</b> GPL
<hr>
<h2>Table des mati&egrave;res</h2>






<ul>






  <li><a href="#description">Description</a></li>






  <li><a href="#syntax">Syntaxe du filtre</a>
    
    
    
    
    
    <ul>






      <li><a href="#mpeg2source">MPEG2Source()</a></li>






      <li><a href="#LumaYV12">LumaYV12()</a></li>






      <li><a href="#BlindPP">BlindPP()</a></li>






      <li><a href="#DeBlock">Deblock()</a></li>






    
    
    
    
    
    </ul>






  </li>






  <li><a href="#examples">Exemples d'utilisation</a>
    
    
    
    
    
    <ul>






      <li><a href="#loadplugin-ex">LoadPlugin()</a></li>






      <li><a href="#mpeg2source-ex">MPEG2Source()</a></li>






      <li><a href="#LumaYV12-ex">LumaYV12()</a></li>






      <li><a href="#BlindPP-ex">BlindPP()</a></li>






      <li><a href="#Deblock-ex">Deblock()</a></li>






    
    
    
    
    
    </ul>






  </li>






  <li><a href="#app_A">Annexe A: </a><a href="dgdecode.htm#app_A">Notes sur </a><a href="#app_A">BlindPP()</a></li>






  <li><a href="dgdecode.htm#app_A">Annexe</a><a href="#app_B">&nbsp;B: </a><a href="dgdecode.htm#app_B">Notes sur l'algorithme </a><a href="#app_B">iDCT</a></li>






  <li><a href="dgdecode.htm#app_A">Annexe</a><a href="#app_C">&nbsp;C: Instructions SIMD</a></li>






  <li><a href="#history">Historique des versions</a></li>






  <li><a href="#credits">Remerciements</a></li>






</ul>






<h2><a name="description"></a>Description</h2>





DGDecode fait partie du package DGMPGDec. C'est un plugin de
d&eacute;codage MPEG-1/2 con&ccedil;u pour AviSynth v2.5 et
sup&eacute;rieures. Il est capable de d&eacute;coder n'importe quel
flux MPEG-1 ou MPEG-2 lu par DGIndex. Il dispose, entre autres, des
fonctions suivantes: g&egrave;re l'espace de couleurs de sortie YV12, I420 et YUY2
(ainsi que RGB24 via DGVfapi), des iDCT optimis&eacute;s, un post
traitement de type deblocking et deringing, filtrage sur la
luminosit&eacute;.<br>





<br>





DGDecode est bas&eacute; sur MPEG2Dec3 v1.10, qui &eacute;tait lui
m&ecirc;me bas&eacute; sur MPEG2Dec2 issu du projet SourceForge
"save-oe".

<p>Note importante: Ce filtre f&ucirc;t renomm&eacute; en DGDecode pour
&eacute;viter les confusions et pour le mettre clairement en relation avec
les versions de DVD2AVI de neuron2 renomm&eacute;es en DGIndex. Neuron2
fait beaucoup d'efforts pour que la reconnaissance aille &eacute;galement
&agrave; ceux qui sont &agrave; l'origine de DGDecode. Neuron2 a fait
&eacute;volu&eacute; DVD2AVI et &agrave; corrig&eacute; des bugs, mais
il se place dans la continuit&eacute; des "g&eacute;ants" cit&eacute;s
dans la section Remerciements de cette aide.</p>







<p>Vous pouvez obtenir la derni&egrave;re version des ex&eacute;cutables et des sources sur la page suivantes: <a href="http://neuron2.net/dgmpgdec/dgmpgdec.html">http://neuron2.net/dgmpgdec/dgmpgdec.html</a></p>





<p>Ce filtre est un logiciel libre distribu&eacute; sous les termes de
la licence GNU GPL v2. Vous devez &ecirc;tre d'accord avec les termes
de cette licence avant d'utiliser ce plugin ou son code source.
Reportez vous &agrave; la section Licence pour plus de d&eacute;tails.</p>






<h2><a name="syntax"></a>Syntaxe du filtre</h2>






<h3><a name="mpeg2source"></a>MPEG2Source()</h3>






<p><code>MPEG2Source</code> (string <var>"d2v"</var>,
int <var>"idct"</var>, int
<var>"cpu"</var>, bool <var>"iPP"</var>, int <var>"moderate_h"</var>,
int
<var>"moderate_v"</var>, str <var>"cpu2"</var>,
bool <var>"upConv"</var>, bool
<var>"i420"</var>, int <var>"info"</var>, bool
<var>"showQ"</var>, bool
<var>"fastMC"</var>)</p>






<p>Bien que DGDecode d&eacute;code maintenant aussi bien le MPEG-1 et
le MPEG-2, la fonction s'appelle toujours MPEG2Source() pour des
raisons de compatibilit&eacute; avec les scripts existants. Vous pouvez
l'utiliser pour d&eacute;coder les flux MPEG-1 et MPEG-2.</p>





<p><var>d2v</var>: "[CHEMIN\]project.d2v"</p>






<p>C'est le fichier de projet cr&eacute;&eacute; par DGIndex.<br>





Param&egrave;tre obligatoire!<br>





Note 1: CHEMIN peu &ecirc;tre ignor&eacute; si le fichier "project.d2v"
est dans le m&ecirc;me r&eacute;pertoire que le fichier AviSynth (*.avs).</p>






<p><var>idct</var>: de 0 &agrave; 7 (par d&eacute;faut: 0)</p>






<p>C'est l'algorithme iDCT utilis&eacute; pour le d&eacute;codage.<br>





Pour plus d'informations sur l'iDCT, reportez vous &agrave; <a href="#app_B">l'annexe B</a>.<br>





Reportez vous &agrave; <a href="#app_C">l'annexe C</a> pour connaitres les CPU support&eacute;s.<br>






- 0: Utilise les valeurs indiqu&eacute;es par DGIndex (iDCTs 6 et 7 non disponibles dans
DGIndex)<br>






- 1: 32-bit MMX<br>






- 2: 32-bit SSEMMX<br>






- 3: 64-bit SSE2MMX<br>






- 4: 32-bit Floating Point<br>






- 5: 64-bit IEEE-1180 Reference<br>






- 6: 32-bit SSEMMX (Skal)<br>






- 7: 32-bit Simple MMX (XviD)</p>






<p><var>cpu</var>: de 0 &agrave; 6 (par d&eacute;faut: 0)</p>






<p>Param&egrave;tres de post-traitement rapides.<br>






(Y=luma, C=chroma, H=horizontal, V=vertical)<br>






- 0: DESACTIVE LE POST-TRAITEMENT<br>






- 1: DEBLOCK_Y_H<br>






- 2: DEBLOCK_Y_H, DEBLOCK_Y_V<br>






- 3: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H<br>






- 4: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H, DEBLOCK_C_V<br>






- 5: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H, DEBLOCK_C_V, DERING_Y<br>






- 6: DEBLOCK_Y_H, DEBLOCK_Y_V, DEBLOCK_C_H, DEBLOCK_C_V, DERING_Y,
DERING_C</p>






<p><var>iPP</var>: true/false (vrai/faux) (par d&eacute;faut: auto)</p>






<p>Post-traitement bas&eacute; sur les champs.<br>





DGDecode utilise le drapeau PROGRESSIVE_FRAME pour changer entre les
modes de post-traitement bas&eacute;es sur des champs ou sur des
images, ceci pour chaque image.<br>





Vous devez utiliser le param&egrave;tre iPP uniquement si vous
souhaitez forcer DGDecode &agrave; utiliser un mode particulier de
post-traitement.<br>






- true: force le mode de post-traitement bas&eacute; sur les champs (pour source entrelac&eacute;es)<br>






- false: force le mode de post-traitement bas&eacute; sur les images (pour les sources progressives)</p>






<p><var>moderate_h</var>, <var>moderate_v</var>:
de 0 &agrave; 255 (par d&eacute;faut: moderate_h=20, moderate_v=40)</p>






<p>Sensibilit&eacute; de d&eacute;tection des blocs.<br>






(moderate_h=horizontal, moderate_v=vertical)<br>





Des valeurs plus faibles produisent un filtrage plus important. Utilisez ce param&egrave;tre avec pr&eacute;cautions.</p>






<p><var>cpu2</var>: (par d&eacute;faut: "")</p>






<p>Param&egrave;tres de post-traitement personnalis&eacute;s.<br>





Indique une cha&icirc;ne de six caract&egrave;res de x et de o se
r&eacute;f&eacute;rant &agrave; la liste suivante (sensible &agrave;
la casse).<br>





Chaque "x" active le param&egrave;tre de post-traitement &nbsp;correspondant.<br>





Chaque "o" d&eacute;sactive le param&egrave;tre de post-traitement correspondant.<br>






caract&egrave;re 1:&nbsp;r&eacute;duction de l'effet de bloc horizontalement sur la luminance<br>






caract&egrave;re&nbsp;2: luma vertical deblocking (r&eacute;duction de l'effet de bloc verticalement sur la luminance<br>






caract&egrave;re&nbsp;3:&nbsp;r&eacute;duction de l'effet de bloc horizontalement sur la chrominance<br>






caract&egrave;re&nbsp;4:&nbsp;r&eacute;duction de l'effet de bloc verticalement sur la chrominance<br>






caract&egrave;re&nbsp;5:&nbsp;r&eacute;duction de l'effet de fourmillement des contours (contours baveux) sur la luminance<br>


caract&egrave;re&nbsp;6:&nbsp;r&eacute;duction de l'effet de
fourmillement des contours (contours baveux) sur la&nbsp;chrominance</p>






<p>Par exemple, pour activer un post traitement sur le param&egrave;tre chrominance seulement, utilisez:</p>






<pre>MPEG2Source("project.d2v", cpu2="ooxxox")</pre>






<p><var>upConv</var>: true/false (vrai/faux) (par d&eacute;faut: false)</p>






<p>Convertit une source YV12 (4:2:0) en YUY2 (4:2:2) en se basant sur le drapeau PROGRESSIVE_FRAME.<br>





Ignor&eacute; si la source n'est pas en YV12 (4:2:0)<br>





Utilisez les filtres de conversion AviSynth pour forcer un mode de re&eacute;chantillonnage constant.<br>






- true: Effectue la conversion en se basant sur le drapeau PROGRESSIVE_FRAME<br>






- false: N'effectue pas de conversion</p>






<p><var>i420</var>:&nbsp;true/false (vrai/faux) (par d&eacute;faut: false)</p>






<p>Renvoie une image dans l'espace de couleur I420.<br>





Peut &ecirc;tre utile pour des raisons de compatibilit&eacute; avec certaines applications.<br>





Ignor&eacute; si la source n'est pas en YV12 (4:2:0), ou si upConv=true.<br>






- true: renvoie une image dans l'espace de couleur&nbsp;I420<br>






- false: renvoie une image dans l'espace de couleur&nbsp;YV12</p>






<p><var>info</var>: de 0 &agrave; 3 (par d&eacute;faut: 0)</p>






<p>Informations de d&eacute;bugage.<br>






- 0: Ne cr&eacute;e par d'infos de d&eacute;bugage.<br>






- 1: Superpose les infos de d&eacute;bugage &agrave; la video.<br>






- 2: Renvoie les infos de d&eacute;bugage avec OutputDebugString()<br>






- 3: Renvoie des conseils sur la video (comme d&eacute;fini dans le fichier utilities.cpp/utilities.h)</p>






<p><var>showQ</var>: true/false&nbsp;(vrai/faux) (par d&eacute;faut: false)</p>






<p>Affiche les quantificateurs des macro blocs.<br>






- true: Affiche les quantificateurs<br>






- false: N'affiche pas les quantificateurs</p>






<p><var>fastMC</var>: true/false&nbsp;(vrai/faux) (par d&eacute;faut: false)</p>






<p>Compensation de mouvement rapide par Vlad.<br>





Un l&eacute;ger gain de vitesse, mais avec une pr&eacute;cision moindre.<br>





A utiliser seulement pour des tests. Sera peut &ecirc;tre supprim&eacute; dans des version ult&eacute;rieures.<br>





N&eacute;cessite SSE or 3DNow!, reportez vous &agrave; <a href="#app_C">l'annexe&nbsp;C</a> pour voir les CPUs support&eacute;s.</p>






<h3><a name="LumaYV12"></a>LumaYV12()</h3>






<p><code>LumaYV12</code> (clip, int <var>"lumoff"</var>,
float <var>"lumgain"</var>)</p>






<p>Cette fonction n'a aucun lien avec le filtre de luminance de DGIndex.<br>




La transformation appliqu&eacute;e est la suivante: Y = (y * lumgain) +
lumoff avec lumgain=gain de luminance et lumoff=d&eacute;calage de
luminance.</p>






<p>LumaYV12() renvoie une image dans la plage de couleur YUV 0-&gt;255,
et pas dans la plage 16-&gt;235 de la norme CCIR-601. Utilisez le
filtre int&eacute;gr&eacute; &agrave; AviSynth ColorYUV() si vous
souhaitez forcer l'utilisation de la plage de couleur 16-&gt;235. La
fonction de LumaYV12() peut &ecirc;tre obtenue par le filtre
ColorYUV(), qui dispose de plus de fonctions. Mais LumaYV12() est
optimis&eacute; pour la vitesse dans ses l&eacute;g&egrave;res manipulations des
informations de luminance.</p>




<p><var>lumoff</var>: de -255 &agrave; 255 (par d&eacute;faut: 0)</p>






<p>D&eacute;calage de&nbsp;luminance<br>




Ajuste la luminance de tout les pixels d'une valeur donn&eacute;e.</p>






<p><var>lumgain</var>: de 0.0 &agrave; 2.0 (par d&eacute;faut: 1.0)</p>






<p>Gain de luminance.<br>




Ajuste la luminance de tout les pixels par une valeur proportionnelle.</p>






<h3><a name="BlindPP"></a>BlindPP()</h3>






<p><code>BlindPP</code> (clip, int <var>"quant"</var>,
int <var>"cpu"</var>, bool
<var>"iPP"</var>, int <var>"moderate_h"</var>,
int <var>"moderate_v"</var>, string
<var>"cpu2"</var>)</p>






<p>Pour supprimer les effets de blocs et de contours baveux (deblocking et deringing) d'une video.<br>




N&eacute;cessite une video d'entr&eacute;e en YUY2 ou YV12.<br>




Reportez vous &agrave; <a href="#app_A">l'annexe A</a> pour des explications sur son utilisation.</p>






<p><var>quant</var>: de 0 &agrave; 31 (par d&eacute;faut: 2)</p>






<p>Quantificateur &eacute;mul&eacute;.<br>




Indique la force du traitement d'att&eacute;nuation des blocs.</p>






<p><var>cpu</var>: de 0 &agrave; 6 (par d&eacute;faut: 6)</p>






<p>M&ecirc;me fonction que dans MPEG2Source(), mais avec des valeurs par d&eacute;faut diff&eacute;rentes.</p>






<p><var>iPP</var>: true/false (vrai/faux) (par d&eacute;faut: false)</p>






<p>M&ecirc;me fonction que dans MPEG2Source(),&nbsp;mais avec des valeurs par d&eacute;faut diff&eacute;rentes.<br>




Mode automatique NON disponible.</p>






<p><var>moderate_h</var>, <var>moderate_v</var>,
<var>cpu2</var>: (par d&eacute;faut: moderate_h=20, moderate_v=40,
cpu2="")</p>






<p>M&ecirc;me fonction que dans MPEG2Source(),&nbsp;mais avec des valeurs par d&eacute;faut diff&eacute;rentes.</p>






<h3><a name="DeBlock"></a>DeBlock()</h3>






<p><code>Deblock</code> (clip, int <var>"quant"</var>,
int <var>"aOffset"</var>, int
<var>"bOffset"</var>, bool <var>"mmx"</var>,
bool <var>"isse"</var>)</p>






<p>Filtre d'att&eacute;nuation de bloc H.264 de Manao. (v0.9.5)<br>




N&eacute;cessite une entr&eacute;e en YV12.<br>




(quant + aOffset) ET (quant + bOffset) doivent tout les deux &ecirc;tre &gt;= 16 ou le filtre n'a aucune action.</p>






<p><var>quant</var>: de 0 &agrave; 51 (par d&eacute;faut: 25)</p>






<p>Quantificateur &eacute;mul&eacute;.<br>




Indique la force du traitement d'att&eacute;nuation de blocs.</p>






<p><var>aOffset</var>: (par d&eacute;faut: 0)</p>






<p>Modifie la limite de d&eacute;tection des blocs.<br>




Une valeur &eacute;lev&eacute;e signifie que plus de blocs seront trait&eacute;es.</p>






<p><var>bOffset</var>: (par d&eacute;faut: 0)</p>






<p>Modifie la limite de d&eacute;tection des blocs ainsi que le force du processus d'att&eacute;nuation des blocs.<br>




De la m&ecirc;me mani&egrave;re, une valeur &eacute;lev&eacute;e provoquera un filtrage fort.</p>






<p><var>mmx</var>: true/false&nbsp;(vrai/faux) (par d&eacute;faut: true)</p>






<p>D&eacute;sactiv&eacute;e par d&eacute;faut si le processeur ne supporte pas cette fonction.<br>






- true: Active les optimisations MMX<br>






- false: D&eacute;sactive les optimisations MMX</p>






<p><var>isse</var>: true/false&nbsp;(vrai/faux) (par d&eacute;faut: true)</p>






<p>D&eacute;sactiv&eacute;e par d&eacute;faut si le processeur ne supporte pas cette fonction.<br>




Reportez vous &agrave; <a href="#app_C">l'annexe C</a> pour voir les processeurs support&eacute;s.<br>






- true:&nbsp;Active les optimisations  SSE<br>






- false:&nbsp;D&eacute;sactive les optimisations  SSE</p>






<h2><a name="examples"></a>Exemples d'utilisation</h2>






<h3><a name="loadplugin-ex"></a>AviSynth
LoadPlugin()</h3>






<p>La fonctions &nbsp;LoadPlugin() d'AviSynth doit &ecirc;tre
invoqu&eacute;e avant que la fonction DGDecode ne puisse &ecirc;tre
utilis&eacute;e.<br>




Pour cela, rajoutez la ligne suivante au d&eacute;but de votre script AviSynth (*.avs):</p>






<pre>LoadPlugin("[PATH\]DGDecode.dll")</pre>






<p>Note: PATH est facultatif si DGDecode.dll se trouve dans le
r&eacute;pertoire de plugin par d&eacute;faut d'AviSynth, sinon PATH doit
&ecirc;tre indiqu&eacute;.</p>






<h3><a name="mpeg2source-ex"></a>MPEG2Source()</h3>






<p>MPEG2Source() ne doit &ecirc;tre utilis&eacute; que pour des sources MPEG-1 et MPEG-2.</p>






<p>Pour effectuer un d&eacute;codage en YV12:</p>






<pre>MPEG2Source("[PATH\]project.d2v")</pre>






<p>Note: PATH&nbsp;est facultatif si "project.d2v" se trouve dans le
m&ecirc;me r&eacute;pertoire que votre script AviSynth (*.avs).</p>






<p>Pour att&eacute;nuer un effet de blocs sur une image (deblocking):</p>






<pre>MPEG2Source("project.d2v", cpu=4)</pre>






<p>Pour att&eacute;nuer un effet de blocs sur une source entrelac&eacute;e, avec une sensibilit&eacute; verticale accrue:</p>






<pre>MPEG2Source("project.d2v", cpu=4, iPP=true, moderate_v=20)</pre>






<p>Pour att&eacute;nuer les contours baveux d'une image (deringing):</p>






<pre>MPEG2Source("project.d2v", cpu2="ooooxx")</pre>






<p>Pour s&eacute;lectionner l'iDCT optimis&eacute;e 32bit SSE2 et renvoyer une image dans l'espace de couleur I420:</p>






<pre>MPEG2Source("project.d2v", idct=5, i420=true)</pre>






<p>Pour convertir une source en&nbsp;YUY2 en se basant sur le drapeau PROGRESSIVE_FRAME:</p>






<pre>MPEG2Source("project.d2v", upConv=true)</pre>






<p>Pour superposer sur l'image des informations &agrave; propos de la video:</p>






<pre>MPEG2Source("project.d2v", info=1)</pre>






<h3><a name="LumaYV12-ex"></a>LumaYV12()</h3>






<p>Les exemples suivant de LumaYV12() sont compl&egrave;tements subjectifs.<br>






Ajustez les&nbsp;param&egrave;tres en fonction de vos besoins.</p>






<p>Pour assombrir la video:</p>






<pre>MPEG2Source("project.d2v")<br>LumaYV12(lumoff=-10, lumgain=0.9)</pre>






<p>Pour &eacute;clairer la video:</p>






<pre>MPEG2Source("project.d2v")<br>LumaYV12(lumoff=10, lumgain=1.1)</pre>






<h3><a name="BlindPP-ex"></a>BlindPP()</h3>






<p>BlindPP() ne devrait pas &ecirc;tre utilis&eacute; quand vous
utilisez la fonction MPEG2Source(), parce que ses options de
post-traitements sont
meilleures. En principe,&nbsp;BlindPP() peut &ecirc;tre utilis&eacute;
quand vous ouvrez une video avec les filtres&nbsp;AviSource() ou
DirectShowSource() qui ne dispose pas de param&egrave;tres de
post-traitement.</p>






<p>Pour faire un deblocking et un deringing de base:</p>






<pre>AVISource("my_video.avi")<br>BlindPP()</pre>






<p>Pour faire du deblocking seulement:</p>






<pre>AVISource("my_video.avi")<br>BlindPP(cpu=4)</pre>






<p>Pour faire du deblocking avec une sensibilit&eacute; horizontale accrue:</p>






<pre>AVISource("my_video.avi")<br>BlindPP(cpu=4, iPP=true, moderate_h=10)</pre>






<p>Pour faire un deblocking et un deringing plus fort:</p>






<pre>DirectShowSource("my_video.mpg")<br>BlindPP(quant=12)</pre>






<p>Pour faire du deringing seulement:</p>






<pre>DirectShowSource("my_video.mpg")<br>BlindPP(cpu2="ooooxx")</pre>






<h3><a name="Deblock-ex"></a>Deblock()</h3>






<p>Deblock() ne devrait pas &ecirc;tre utilis&eacute; avec des sources MPEG-2.<br>




Il est plus souvent utiles quand on ouvre une video avec les filtres AviSource() ou
DirectShowSource().</p>






<p>Pour faire un deblocking par d&eacute;faut:</p>






<pre>AVISource("my_video.avi")<br>Deblock()</pre>






<p>Pour faire un deblocking fort avec une sensibilit&eacute; accrue:</p>






<pre>DirectShowSource("my_video.mpg")<br>Deblock(quant=32, aOffset=16, bOffset=24)</pre>






<h2><a name="app_A"></a>ANNEXE A: Notes sur BlindPP()</h2>






<p>Les blocs sont le r&eacute;sultat de la DCT de 8x8 pixels
utilis&eacute;e par les encodeur MPEG. &nbsp;Vous devez donc &ecirc;tre
s&ucirc;r que les blocs que vous voulez supprimer sont encore
align&eacute;s avec les bord de l'image. Cela veut dire que vous ne
devez effectuer aucun d&eacute;coupage (crop) ni redimenssionnement
(resize) avant d'appliquer BlindPP(). Si votre source est
entrelac&eacute;e, indiquez le param&egrave;tre
<var>iPP</var>=true, si vous avez une source progressive, le param&egrave;tre par d&eacute;faut est correct&nbsp;(<var>iPP</var>=false).</p>




<p>Les param&egrave;tres sont: <var>quant</var>, <var>cpu2</var>,
<var>moderate_h</var>, et
<var>moderate_v</var>.</p>






<p><var>quant</var> indique la force &agrave; laquelle le processus d'att&eacute;nuation de bloc (deblocking) doit &ecirc;tre fait.</p>






<p>Param&eacute;trez <var>cpu2</var> &agrave; "xxxxoo" pour un deblocking horizontal et vertical sur la&nbsp;luminance
et la&nbsp;chrominance, &agrave; "xooxoo" pour un deblocking horizontal
sur la luminance et vertical sur la chromiannce, etc.</p>






<p><var>moderate_h</var> et <var>moderate_v</var> indiquent les
sensibilit&eacute;s horizontales et verticales, c'est &agrave; dire,
o&ugrave; appliquer le deblocking, et o&ugrave; ne pas l'appliquer. Ils
contr&ocirc;le la sensibilit&eacute; de d&eacute;tection d'un bloc.</p>






<p><var>quant</var>=2, <var>moderate_h</var>=35-45,
<var>moderate_v</var>=45-55 effectuera un deblocking l&eacute;ger sur les bloc
clairement visibles seulement. Le clip conservera tout son
d&eacute;tail et sa pr&eacute;cision, mais laissera identiques les
blocs peu visibles, et effacera seulement l&eacute;g&egrave;rement les blocs
clairement visibles.</p>






<p><var>quant</var>=16, <var>moderate_h</var>=15-20,
<var>moderate_v</var>=20-30 effectuera un deblocking fort sur tout ce
qui pourrait peut &ecirc;tre &ecirc;tre un bloc. Cela a pour effet de
supprimer une grande quantit&eacute; de d&eacute;tail et de
pr&eacute;cision.</p>






<p>Le reste d&eacute;pend de ce que vous souhaitez obtenir et de votre source.</p>






<p>Un autre exemple. Puisque l'excellent d&eacute;bruiteur
PixieDust() produit quelquefois des blocs dans les zones en mouvement,
je fais quelquefois ceci:</p>




<pre>PixieDust(2)<br>BlindPP(quant=8, cpu2="xxxxoo", moderate_h=45, moderate_v=55)</pre>






<p>Cela &eacute;limine une bonne partie des blocs visibles, si et
seulement si PixieDust() en a ajout&eacute;. Sur les 99.8% o&ugrave;
PixieDust() n'a pas produit de blocs, cela ne fera rien.</p>




<h2><a name="app_B"></a>ANNEXE B: Notes sur l'algorithme iDCT</h2>






<p>Le fichier "Lisez-moi" de FlasKMPEG contient une excellente description technique de ce qu'est l'iDCTs. Il est &eacute;crit:</p>






<blockquote>
  
  
  
  
  
  <p><i>" Les informations video &agrave; l'int&eacute;rieur d'un
fichier MPEG sont enregistr&eacute;s dans le domaine de
fr&eacute;quence plut&ocirc;t que dans le domaine spatial (les images
que nous voyons). De cette mani&egrave;re, les informations sont
compact&eacute;es et ce compactage permet de compresser (r&eacute;duire) la
quantit&eacute; d'information &agrave; transmettre par le canal de
transmission. MPEG utilise la DCT </i><i>(Discrete Cosine
Transform - Transform&eacute;e en cosinus discr&egrave;te)</i><i>
pour transformer les informations spatiales en informations de
fr&eacute;quences.
Pour ramener les informations spatiale d'un flux MPEG, il faut donc
appliquer une iDCT, c'est &agrave; dire une Inverse Discrete Cosine
Transform (Transform&eacute;e en cosinus discr&egrave;te inverse), qui
d&eacute;fait la DCT qui &agrave; &eacute;t&eacute; faites pendant
l'encodage."</i></p>






  
  
  
  
  
  <p><i>"Biens que MPEG soit d&eacute;terministe (&eacute;tant
donn&eacute;e un flux MPEG, la sortie doit &ecirc;tre identique
quelque soit le d&eacute;codeur utilis&eacute;), le standard laisse un
degr&eacute; de libert&eacute; quant au choix de l'iDCT pour le
d&eacute;codage. De cette mani&egrave;re, un d&eacute;codeur peut
&ecirc;tre plus facilement impl&eacute;ment&eacute; en fonction de
l'&eacute;quipement sur lequel il est utilis&eacute;. Ce que le
standard exige, c'est que l'iDCT soit conforme au sp&eacute;cifications
de la norme IEEE-1180. Cela signifie que l'erreur produite par l'iDCT
ne doit&nbsp;pas d&eacute;passer les limites fix&eacute;es par l'IEEE-1180."</i></p>






</blockquote>






<p>L'iDCT que vous devez utiliser d&eacute;pend principalement du CPU
que vous utilisez et dans une moindre mesure de la pr&eacute;cision de
l'iDCT que vous souhaitez obtenir. La plupart des gens ne seront pas
capable de faire la diff&eacute;rence de qualit&eacute; entre ces
algorithmes mais on peut facilement mettre en &eacute;vidences ces
diff&eacute;rences en combinant les filtres AviSynth
<a href="../corefilters/subtract.htm">Subtract</a>() et <a href="../corefilters/levels.htm">Levels</a>(). Toute les options propos&eacute;es sont compatibles avec la norme IEEE-1180, &agrave; l'exception de&nbsp;<b>SSE/MMX (Skal)</b>.</p>






<p>En terme de qualit&eacute;: <b>IEEE-1180 Reference</b> &gt; <b>64-bit
Floating Point</b> &gt; <b>Simple MMX (XviD)</b>
&gt; les autres iDCT.</p>






<p>En terme de vitesse: <b> SSE2/MMX</b> et <b>
SSE/MMX (Skal)</b> sont habituellement les plus rapides. L'iDCT
<b> IEEE-1180 Reference</b> est de loin la plus lente.</p>






<h2><a name="app_C"></a>ANNEXE C: Instructions SIMD</h2>






<p> SIMD est l'acronyme de <i> Single Instruction</i>,
<i> Multiple Data ( instruction unique, donn&eacute;es multiples)</i>.
C'est un terme qui se r&eacute;f&egrave;re &agrave; un ensemble
d'op&eacute;rations pour manipuler efficacement de grandes
quantit&eacute;s de donn&eacute;es en parall&egrave;le. Ceci est
particuli&egrave;rement efficace dans les applications ou la video et
l'audio sont manipul&eacute;es. Ce qui n&eacute;cessite habituellement des
r&eacute;p&eacute;titions et des successions d'instructions peut
maintenant &ecirc;tre effectuer en une seule instruction.</p>






<p>Il existe sept ensembles d'instructions SIMD disponibles pour les
processeurs Intel et AMD, mais pas tout les processeurs ne supportent
ces ensembles d'instructions. C'est pourquoi beaucoup de fonction de
DGDecode fournissent une option qui permet de choisir le jeux
d'instruction &agrave; utiliser. Le tableau suivant liste les
instructions SIMD support&eacute;es par DGDecode, et les processeurs
capables d'utiliser ces instructions.</p>






<ul>






  
  
  
  
  
  <ul>






    
    
    
    
    
    <table border="1" cellpadding="10%" cellspacing="2">






      <caption><i>Tableau 1: Instructions SIMD&nbsp;support&eacute;es par DGDecode</i></caption> <tbody>






        <tr>






          <th>&nbsp; </th>






          <th>MMX </th>






          <th>3DNow! </th>






          <th>SSE </th>






          <th>SSE2 </th>






        </tr>






        <tr>






          <th>CPU Intel requis </th>






          <td>Tout les CPUs&nbsp;Intel </td>






          <td>Non support&eacute; par le CPUs Intel </td>






          <td>Pentium 3, Pentium 4 </td>






          <td>Pentium 4 </td>






        </tr>






        <tr>






          <th>CPU AMD requis </th>






          <td>Tout les CPUs&nbsp;AMD </td>






          <td>Tout les CPUs&nbsp;AMD </td>






          <td>Athlon XP, Athlon 64 </td>






          <td>Athlon 64 </td>






        </tr>






      
      
      
      
      
      </tbody>
    
    
    
    
    
    </table>






  
  
  
  
  
  </ul>






</ul>






<h2><a name="history"></a>Historique des versions</h2>






<b>Bas&eacute; sur MPEG2Dec2 (save-oe CVS 28.09.2002), et sur
MPEG2Dec3 (MarcFD).</b>
<ul>




  <li><u>betas versions (de 1 &agrave; 6)</u>
    
    
    
    
    
    
    <ul>




      <li>Ajout du post traitement bas&eacute; sur les champs
par Nic&nbsp;</li>




      <li>Hi&eacute;rarchise le choix des filtres iDCT / filtrage luma</li>




      <li>Corrige le code MMX du filtrage luma (3 bugs au moins)</li>




      <li>Optimisation de la conversion YV12-&gt;YUY2 (+10 %
de vitesse)</li>




      <li>Un bug du post traitement est corrig&eacute;. Un
peu plus lent maintenant.</li>




      <li>D&eacute;sactivation des optimisations SSE2 de
trbarry</li>




      <li>Ajoute le param&egrave;tre de d&eacute;bugage showQ</li>




      <li>Ajout &nbsp;du nouveau code de Vlad pour la
compensation de mouvement (3dnow/ssemmx) / r&eacute;&eacute;criture de
ssemmx</li>




      <li>Rend fonctionnel le transfert de m&eacute;moire MMX pour la recherche (+3% de gain de vitesse)</li>




      <li>Ajoute le support du re&eacute;chantillonnage pour un clip entrelac&eacute;.<br>







      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 0.9 (09.11.02)</u>
    
    
    
    
    
    
    <ul>




      <li>gros nettoyage du code</li>




      <li>nouvelle conception de l'interface AviSynth</li>




      <li>Support du YV12</li>




      <li>Support du RGB24</li>




      <li>autres choses diverses<br>







      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 0.91 (10.11.02)</u>
    
    
    
    
    
    
    <ul>




      <li>nettoyage du code</li>




      <li>ajout des param&egrave;tres de chargement par d&eacute;faut dans le fichier MPEG2Dec3.def</li>




      <li>mode bff dans SeparateFieldsYV12<br>







      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 0.92 (17.11.02)</u>
    
    
    
    
    
    
    <ul>




      <li>publication du code</li>




      <li>impl&eacute;mentation de blindPP
      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 0.93 (25.11.02)</u>
    
    
    
    
    
    
    <ul>




      <li>conversion total du code pour le YV12...</li>




      <li>...qui corrige les bugs YV12</li>




      <li>moins de m&eacute;moire n&eacute;cessaire</li>




      <li>copie rapide MMX (recherche plus rapide)<br>







      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 0.94 (08.12.02)</u>
    
    
    
    
    
    
    <ul>




      <li>petite correction de bug<br>







      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 1.00 (19.01.03)</u>
    
    
    
    
    
    
    <ul>




      <li>version finale</li>




      <li>&eacute;limination de tout les bugs connus<br>







      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 1.01 (unknown) - trbarry</u>
    
    
    
    
    
    
    <ul>




      <li>correction d'un bug avec HDTV (0x21 PID cod&eacute; en dur)<br>







      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 1.02 (12.05.03) - Nic</u>
    
    
    
    
    
    
    <ul>




      <li>malloc align&eacute;e trait&eacute;es diff&eacute;remment<br>







      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 1.03 (12.05.03) - Nic</u>
    
    
    
    
    
    
    <ul>




      <li>Supporte maintenant les fichiers D2V de DVD2AVI 1.77.3 et ceux de la version 1.76<br>







      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 1.04 (12.05.03) - Nic</u>
    
    
    
    
    
    
    <ul>




      <li>Suppression d'un fuite m&eacute;moire, un peu plus rapide<br>







      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 1.05a (12.05.03) - trbarry</u>
    
    
    
    
    
    
    <ul>




      <li>Version de test de trbarry pour optimisations<br>







      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 1.06 (24.05.03)</u>
    
    
    
    
    
    
    <ul>




      <li> Nic: ajout de 2 nouvelles&nbsp;iDCT: Skal (la plus rapide, idct=6)
&amp; SimpleiDCT (tr&egrave;s pr&eacute;cise, idct=7)</li>




      <li>Nic: support pour une utilisation externe de MPEG2Dec3.dll sans
AviSynth<br>







(Voir le code source pour example.zip et GetPic)</li>




      <li>trbarry: ajout d'une optimisation&nbsp;Add_Block et optimisation du d&eacute;codage des blocs pour machines SSE2</li>




      <li>sh0dan: utilise la fonction rapide BitBlt d'AviSynth (quand cela est possible) pour les copies m&eacute;moire</li>




      <li>Nic:&nbsp;optimisations g&eacute;n&eacute;rales :) Plus rapide sur toutes les machines test&eacute;s.<br>







      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 1.07 (6.06.03)</u>
    
    
    
    
    
    
    <ul>




      <li> Nic &amp; Sh0dan: correction de bugs, meilleure stabilit&eacute; sur des flux endommag&eacute;s<br>







      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 1.08 (8.06.03)</u>
    
    
    
    
    
    
    <ul>




      <li> trbarry: optimisation de Simple_iDCT, beaucoup plus rapide maintenant :)</li>




      <li>Nic: ajout de CPUCheck, oublie de corriger&nbsp;Lumafilter la
derni&egrave;re fois (merci ARDA!), robUx4 m'a aid&eacute; &agrave;
transformer simple_idct en un
fastcall<br>







      </li>




    
    
    
    
    </ul>







  </li>




  <li> <u>v 1.09 (26.07.03)</u>
    
    
    
    
    
    
    <ul>




      <li>Nic: maintenant,&nbsp;skal's Sparse iDCT est utilis&eacute; &agrave; la place de idct=6
(la plus rapides)</li>




      <li>Nic: ajout de Luminance_Filter de DVD2AVI 1.77.3,
pour les fois o&ugrave; Luminance_Filter est utilis&eacute; dans le fichier .d2v<br>







      </li>




    
    
    
    
    </ul>







  </li>




</ul>







<ul>




  <li> <u>v 1.10 (28.07.03)</u> </li>




  
  
  
  
  <ul>




    <li>Nic: correction d'un probl&egrave;me avec Luminance_filter dans les fichiers D2V de la version 1.77.3</li>




  
  
  
  
  </ul>




</ul>




<p><b>Renomm&eacute; en DGDecode (neuron2)</b></p>






<ul>






  <li>v 1.0.13 (8.06.04)
    
    
    
    
    
    <ul>






      <li>DG: Corrige DGDecode pour ne pas tronquer les&nbsp;B frames avant la premi&egrave;re P frame.</li>






      <li>DG: Correction d'un bug qui supprimait 2 images.</li>






      <li>DG: R&eacute;&eacute;criture du code pour le d&eacute;codage
et&nbsp;l'acc&egrave;s al&eacute;atoire pour fonctionner correctement
avec les fichiers D2V g&eacute;n&eacute;r&eacute;s par DGIndex.</li>






      <li>DG: Correction dans DGDecode pour qu'il ne plante pas
&agrave; la fermeture de VirtualDub quand la derni&egrave;re image est
incompl&egrave;te.</li>






      <li>DG: Correction de la s&eacute;lection de l'iDCT pour qu'elle ne soit plus globale dans DGDecode.<br>






      </li>






    
    
    
    
    
    </ul>






  </li>






  <li>v 1.1.0 (21.01.05)
    
    
    
    
    
    <ul>






      <li>DG: Ajout d'une correction pour r&eacute;soudre des plantages d&ucirc;s &agrave; des fichiers corrompus.</li>






      <li>DG: Ajout d'une correction pour les fichiers qui changent de matrice de quantification &agrave; la vol&eacute;e.</li>






      <li>tritical: Correction de la d&eacute;cision du mode
de DC du deblocking (post traitement de type&nbsp;att&eacute;nuation
des blocs).</li>






      <li>tritical: Ajout de l'option "info" &agrave;&nbsp;mpeg2source() pour afficher des infos sur les images.</li>






      <li>tritical: iPP est maintenant par d&eacute;faut sur "auto". "auto" utilise le drapeau
PROGRESSIVE_FRAME pour alterner entre les post traitements bas&eacute;s sur les champs ou sur les images.</li>






      <li>tritical: Ajout du support de l'espace de couleur 4:2:2 en entr&eacute;e.</li>






      <li>tritical: Ajout de l'option "upConv" &agrave;
mpeg2source() pour convertir au format 4:2:2 &agrave; partir 4:2:0 en
se basant sur le drapeau PROGRESSIVE_FRAME.</li>






      <li>tritical: BlindPP supporte maintenant l'espace de couleur YUY2.</li>






      <li>tritical: Correction d'un bug de syntaxe de BlindPP. (x vs X)</li>






      <li>tritical: Correction d'un bug mineur avec l'option showQ.</li>






      <li>tritical: Correction d'un petite fuite m&eacute;moire avec FrameList/GOPList qui n'&eacute;taient pas lib&eacute;r&eacute;s.</li>






      <li>tritical: Correction d'un bug avec le post
traitement de deblocking vertical sur la chrominance. Le pointeur QP
transmis &eacute;tait incorrect pour l'espace de couleur 4:2:0.</li>






      <li>tritical: Conversion MMX plus rapides de 4:2:2 &agrave; YUY2 et de YUY2 &agrave; 4:2:2.</li>






      <li>tritical: Correction de la sortie de l'option "info"
qui ne marchait pas correctement si temporal_reference n'&eacute;tait
pas bas&eacute; sur z&eacute;ro au d&eacute;but des GOPs.<br>






      </li>






    
    
    
    
    
    </ul>






  </li>






  <li>v 1.2.0 (17.02.05)
    
    
    
    
    
    <ul>






      <li>DG: Param&egrave;tre "info" modifi&eacute;.</li>






      <li>DG: Correction d'un bug dans le post traitement deringing.</li>






      <li>DG: Correction d'un plantage avec&nbsp;BlindPP() pour les entr&eacute;es en YUY2.<br>






      </li>






    
    
    
    
    
    </ul>






  </li>






  <li>v 1.2.1 (22.02.05)
    
    
    
    
    
    <ul>






      <li>DG: Correction d'un plantage avec BlindPP().</li>






      <li>DG: Correction d'un mauvais post traitement dans l'espace YUY2.</li>






      <li>DG: Changement dans DGDecode pour renvoyer du YV12 par d&eacute;faut.</li>






      <li>DG: Ajout du param&egrave;tre i420 dans DGDecode.</li>






      <li>Manao: Ajout du filtre d'att&eacute;nuation des blocs H.264 avec Deblock().<br>






      </li>






    
    
    
    
    
    </ul>






  </li>






  <li>v 1.3.0 (01.05.05)
    
    
    
    
    
    <ul>






      <li>DG: Ajout de la gestion des exceptions pour que DGDecode ne plante pas sur une image incompl&egrave;te.</li>






      <li>DG: Changement dans la m&eacute;thode de
r&eacute;&eacute;chantillonnage de VFAPI ("_P" devant l'extension du
fichier D2V force un r&eacute;&eacute;chantillonnage progressif; sinon
un mode entrelac&eacute; est utilis&eacute;).<br>






      </li>






    
    
    
    
    
    </ul>






  </li>






  <li>v 1.4.0 (15.06.05)
    
    
    
    
    
    <ul>






      <li>DG: Ajout de conteneur d'appels standards pour les
fonctions d'acc&egrave;s de dgdecode.dll et leur utilisation avec VB,
etc. Par Exemple: getRGBFrame_SC().</li>






      <li>DG: Correction d'un bug de "slice error recovery" qui pouvait causer quelques (rares) erreurs de d&eacute;codages.</li>






      <li>DG: Les flux Program avec des IDs de flux video autres que 0xE0 sont maintenant support&eacute;s.</li>






      <li>DG: Correction des erreurs de d&eacute;codages
d&ucirc;s &agrave; une r&eacute;cup&eacute;ration incorrecte des flux
de transport (transport streams) corrompus.</li>






      <li>DG: Ajout du support des fichiers&nbsp;MPEG1.</li>






      <li>DG: Correction d'un bug dans l'analyse des flux
de transport (transport streams) qui pouvait causer une erreur de
correspondance entre l'acc&egrave;s lin&eacute;aire ou al&eacute;atoire
&agrave; une image.</li>






      <li>DG: Suppression des fonctions YV12toYUY2() et YV12toRGB24() puisqu'elle font doublon avec les filtres AviSynth natifs.</li>






      <li>ARDA: Remplacement du filtre LumaFilter() bugg&eacute; par une version utilisable et optimis&eacute;e: LumaYV12().</li>






      <li>jackei: Correction de Reference iDCT (type 4).</li>






      <li>tritical: Correction de la supposition pitch=width
(pas=largeur). Cela permet des op&eacute;rations correctes dans les
versions d'AviSynth qui modifient les r&egrave;gles d'alignement.</li>






      <li>tritical: DGVfapi supporte maintenant des instances multiples et peut ouvrir aussi bien les scripts AVS que les fichiers D2V.</li>






    
    
    
    
    
    </ul>






  </li>






</ul>






<h2><a name="credits"></a>Remerciements</h2>






<p> Mathias Born, auteur de MPEG2Dec<br>






Donald Graft ("neuron2"), correction pour les images perdues, indexage pr&eacute;cis, support du PVA, ...<br>





Peter Gubanov, auteur de l'iDCT MMX/SSEMMX<br>






Chia-chen Kuo ("jackei"), auteur de DVD2AVI<br>






"MarcFD", support du YV12 et autre<br>






"Nic", post-traitement et autre<br>






Miha Peternel, auteur de Floating Point&nbsp;iDCT et Reference iDCT<br>






Dmitry Rozhdestvensky, auteur de l'iDCT SSE2<br>






"sh0dan", optimisations&nbsp;du code<br>






"Skal", pour l'iDCT SSEMMX<br>






"trbarry", analyse des flux de transport (TS: transport streams), et optimisations du code<br>





"tritical", r&eacute;&eacute;chantillonnage, superposition des&nbsp;infos,
am&eacute;liorations de VFAPI, beaucoup de corrections de bug<br>






"Manao", pour son filtre Deblock()<br>






"ARDA", pour le filtre LumaYV12()<br>






"Did&eacute;e", pour l'annexe A: Notes sur l'utilisation de BlindPP()<br>






"Cyberia", pour les annexes B et C, et la mise &agrave; jour de l'aide</p>






<p><kbd>$English date: 2005/08/11 21:11:50 $<br>






French translation: 2005/10/31 JasonFly <a href="mailto:macpaille@users.sourceforge.net">macpaille@users.sourceforge.net</a></kbd></p>






</body>
</html>
